package com.aliyun.messagemgt.repository.mappers;

import com.aliyun.messagemgt.common.dto.send.MsgRecordVO;
import com.aliyun.messagemgt.dto.MessageRecord;
import com.aliyun.messagemgt.dto.msg.MessageRecordQry;
import com.aliyun.messagemgt.dto.query.BaseMessageSourceQuery;
import com.aliyun.messagemgt.dto.query.MsgPushResultsQuery;
import com.aliyun.messagemgt.dto.query.MyMsgQueryDTO;
import com.aliyun.messagemgt.dto.in.ApiStatisticsQuery;
import com.aliyun.messagemgt.dto.vo.*;
import com.aliyun.messagemgt.entities.MessageRecordEntity;
import com.github.pagehelper.Page;
import org.apache.ibatis.annotations.Param;

import java.time.LocalDate;
import java.util.List;

/**
 * @author
 * @date
 */
public interface MessageRecordMapper {

	/**
	 * 获取推送信息
	 * @param messageRecordQueryVO
	 * @return
	 */
	Page<MessageRecordReturnVO> selectMessageRecord(MessageRecordQueryVO messageRecordQueryVO);

	/**
	 * 获取我的消息
	 * @param myMsgQueryDTO
	 * @return
	 */
	Page<MyMsgVO> selectMyMessageRecord(MyMsgQueryDTO myMsgQueryDTO);

	/**
	 * 对外接口：消息查询
	 * @param msgPushResultsQuery
	 * @return
	 */
	Page<MsgPushResultsQueryVO> selectMsgPushResults(MsgPushResultsQuery msgPushResultsQuery);

	/**
	 * 查询历史消息
	 * @param historyDay
	 * @param pageNum
	 * @param pageSize
	 * @return
	 */
	List<MessageRecordEntity> queryMessageHistory(@Param("historyDay") LocalDate historyDay, @Param("pageNum") int pageNum, @Param("pageSize") int pageSize);

	/**
	 * 查询DEV历史消息
	 * @param historyDay
	 * @param pageNum
	 * @param pageSize
	 * @return
	 */
	List<MessageRecordEntity> queryDevMessageHistory(@Param("historyDay") LocalDate historyDay, @Param("sourceName") String sourceName, @Param("pageNum") int pageNum, @Param("pageSize") int pageSize);

	/**
	 * 删除消息记录表数据
	 * @param msgList
	 * @return
	 */
	int deleteMsg(@Param("msgList") List<MessageRecord> msgList);

	Long countMessageRecord(MessageRecordQueryVO messageRecordQueryVO);

	/**
	 * 批量插入
	 *
	 * @param msgRecordVos
	 * @return
	 */
	int batchMsgRecordInsert(List<MsgRecordVO> msgRecordVos);

	/**
	 * 查询各种渠道推送记录（各渠道调用统计）
	 *
	 * @param apiStatisticsQuery 统计查询参数类
	 * @return List
	 */
	List<MsgRecordStatisticsVO> queryMsgRecordsStatistics(ApiStatisticsQuery apiStatisticsQuery);

	/**
	 * 分页查询消息记录表
	 * @param messageRecordQry
	 * @return
	 */
    List<MessageRecordEntity> page(@Param("messageRecordQry") MessageRecordQry messageRecordQry);

    void updateMsgRecordStatus(@Param("msgRecordVO")MsgRecordVO msgRecordVO);

	MessageRecordEntity getOne(@Param("msgId")Long msgId);

	/**
	 * 根据场景编码时间查询日志
	 * @param messageSourceQuery 场景编码
	 * @return 日志结果
	 */
	Page<MessageRecordVO> selectBySceneCode(BaseMessageSourceQuery messageSourceQuery);
}
